package Futbol_Liga;
/**
 * Klase hau EMA motako entitatea da.  Talde guztien zerrenda da, taldeak gehitu, jokalariak gehitu ahal ditu.
 * @author Txantxangorriak
 *
 */
 
import java.util.ArrayList;
import java.util.Iterator;

import net.sf.jga.algorithms.Sort;

public class TaldeZerrenda {
	
	private ArrayList<Taldea> taldeak;
	private static TaldeZerrenda nireTaldeZerrenda;
	/**
	 * metodo eraikitzailea
	 */
	private  TaldeZerrenda() {
		taldeak=new ArrayList<Taldea>();
	}
	/**
	 * DMA bat denez, talde zerrenda sortzen duen metodo estatikoa da
	 * @return TaldeZerrenda
	 */
	public static TaldeZerrenda getTaldeZerrenda(){
		if (nireTaldeZerrenda==null){
			nireTaldeZerrenda=new TaldeZerrenda();
		}
		return nireTaldeZerrenda;
	}
	/**
	 * Zerrendako iteratzailea bueltatuko du
	 * @return Iterator<Taldea>
	 */
	public Iterator<Taldea> getIteratzailea(){
		return taldeak.iterator();
	}
	/**
	 * Izenaren arabera, taldea lortuko da
	 * @param pIz
	 * @return Taldea
	 */
	public Taldea getTaldea(String pIz){
		Iterator<Taldea> it= getIteratzailea();
		boolean topatua=false;
		Taldea talde=null;
		while(it.hasNext()&& topatua==false){
			talde=it.next();
			if(talde.getIzena()==pIz){
				topatua=true;
			}
		}
		return talde;
		
	}
	/**
	 * Talde bat emanda, zerrenda gehitu egingo da
	 * @param pTal
	 */
	public void taldeaGehitu(Taldea pTal){
		taldeak.add(pTal);
		
	}
	/**
	 * Posizio bat emanda, posizio horretan dagoen taldea bueltatuko da
	 * @param pInd
	 * @return Taldea
	 */
	public Taldea lortuIndizea(int pInd){

		return taldeak.get(pInd);
	}
	/**
	 * Zerrendako taldeen puntuak ezabatu egiten ditu
	 */
	public void puntuakEzabatu(){
		Iterator<Taldea> it=this.getIteratzailea();
		Taldea tald;
		while(it.hasNext()){
			tald=it.next();
			tald.puntuakEzabatu();
		}
	}
	/**
	 * Jokalari bat gehituko du zerrendara
	 * @param pTaldeBalioa
	 * @param pJok
	 */
	public void gehituJokalaria(String pTaldeBalioa, Jokalaria pJok) {
		
	
		Iterator<Taldea> it= this.getIteratzailea();
		Taldea t;
		boolean topatua=false;
		while(it.hasNext() && topatua==false){
			t=it.next();
			if(t.getIzena().equals(pTaldeBalioa)){
				t.jokalariBerria(pJok);
				topatua=true;
		}
		}
		if(topatua==false){
			
			Taldea tal= new Taldea(pTaldeBalioa);
			tal.jokalariBerria(pJok);
			taldeak.add(tal);
			
		}
		
	}
	/**
	 * Talde zerrenda ordenatuta bueltatuko da
	 * @return ArrayList<Taldea>
	 */
	public ArrayList<Taldea> getTaldeOrdenatuta() {
		ArrayList<Taldea> talord=new ArrayList<Taldea>();
		talord=(ArrayList<Taldea>) Sort.sort(taldeak);
	
		return talord;
	}
	/**
	 * Zerrendako puntuak eguneratuko dira
	 */
	public void puntuakEguneratu(int pI) {
		Iterator<Taldea> it=this.getIteratzailea();
		Taldea tald;
		while(it.hasNext()){
			tald=it.next();
			tald.puntuazioaEguneratu(pI);
		}
		
	}
	/**
	 * Jokalari bat fitxatxean, zerrendara gehitu egiten da
	 * @param pTaldea
	 * @param pIzena
	 */
	public void jokalariaFitxatu(String pTaldea, String pIzena) {
		
		boolean topatua = false;
		Iterator<Taldea> it2=this.getIteratzailea();
		Taldea tal;
		while(it2.hasNext() && topatua==false){
			tal=it2.next();
			if(tal.getIzena().equals(pTaldea)){
				topatua=true;
				tal.jokalariaFitxatu(pIzena);
			}
		}
		
	}
	
	/**
	 * jokalari bat talde batekoa den ala ez esango digu
	 * @param jokIzena
	 * @param taldeIzena
	 */
	public boolean taldekoa(String jokIzena, String taldeIzena) {
		boolean erantzuna=false;
		Iterator<Taldea> it=this.getIteratzailea();
		Taldea tal;
		while(it.hasNext() && erantzuna==false){
			tal=it.next();
			if(tal.getIzena().equals(taldeIzena)){
				erantzuna=tal.jokalariaDago(jokIzena);
			}
		}
		
		return erantzuna;
	}

}




